// 下载工具模块 - 负责处理Markdown和PDF格式的下载
// 所有下载功能已禁用，仅保留接口

import { jsPDF } from "jspdf";
import { addChineseFontToJsPDF, setChineseFont } from "./chineseFont";

// 检查是否在后台脚本环境中
const isBackgroundScript = typeof document === "undefined" || !document.body;

// 处理下载请求
export async function handleDownload(content, format, title) {
  console.log("[DeepSeek下载] 开始处理下载", { format, title });
  try {
    if (!content) {
      throw new Error("没有可下载的内容");
    }

    // 获取当前页面标题作为文件名
    const fileName = generateFileName(title || "DeepSeek翻译", format);
    console.log("[DeepSeek下载] 生成文件名", fileName);

    if (format === "pdf") {
      console.log("[DeepSeek下载] 开始下载PDF");

      // 在后台脚本环境中，使用不同的处理方式
      if (isBackgroundScript) {
        console.log("[DeepSeek下载] 在后台脚本环境中处理PDF");
        return await handleBackgroundPDFDownload(content, fileName);
      } else {
        await downloadPDF(content, fileName);
        return { success: true };
      }
    } else {
      // Markdown下载功能已禁用
      console.log("[DeepSeek下载] Markdown下载功能已禁用");
      return {
        success: false,
        message: "只支持PDF下载功能",
      };
    }
  } catch (error) {
    console.error("[DeepSeek下载] 下载处理失败:", error);
    throw error;
  }
}

// 在后台脚本中处理PDF下载
async function handleBackgroundPDFDownload(content, fileName) {
  console.log("[DeepSeek下载] 使用后台脚本处理PDF下载");

  try {
    // 在后台脚本中，我们需要将内容发送到内容脚本进行处理
    // 获取当前活动标签页
    const tabs = await chrome.tabs.query({ active: true, currentWindow: true });
    if (!tabs || tabs.length === 0) {
      throw new Error("找不到活动标签页");
    }

    const activeTab = tabs[0];

    // 发送消息到内容脚本处理PDF下载
    return new Promise((resolve, reject) => {
      chrome.tabs.sendMessage(
        activeTab.id,
        {
          action: "downloadPDF",
          content: content,
          title: fileName.replace(/\.pdf$/, ""),
        },
        (response) => {
          if (chrome.runtime.lastError) {
            console.error(
              "[DeepSeek下载] 发送PDF下载请求失败:",
              chrome.runtime.lastError
            );
            reject(new Error(chrome.runtime.lastError.message));
            return;
          }

          if (response && response.success) {
            resolve({ success: true });
          } else {
            reject(new Error(response?.error || "PDF下载失败"));
          }
        }
      );
    });
  } catch (error) {
    console.error("[DeepSeek下载] 后台处理PDF下载失败:", error);
    throw error;
  }
}

// 生成文件名 (保留此函数供将来可能恢复功能时使用)
function generateFileName(title, format) {
  // 清理标题，移除不适合作为文件名的字符
  const cleanTitle = title
    .replace(/[\\/:*?"<>|]/g, "_") // 替换Windows系统不允许的文件名字符
    .replace(/\s+/g, "_") // 替换空白字符为下划线
    .substring(0, 50); // 限制长度

  const timestamp = new Date()
    .toISOString()
    .replace(/[:.]/g, "-")
    .substring(0, 19);
  const extension = format === "markdown" ? "md" : "pdf";

  return `${cleanTitle}_${timestamp}.${extension}`;
}

// 下载为Markdown格式
async function downloadMarkdown(content, fileName) {
  console.log("[DeepSeek下载] Markdown下载功能已禁用");
  throw new Error("Markdown下载功能已禁用");
}

// 下载为PDF格式
async function downloadPDF(content, fileName) {
  try {
    console.log("[DeepSeek下载] 准备PDF内容");

    // 创建PDF文档
    const pdf = new jsPDF({
      orientation: "portrait", // 纵向
      unit: "mm", // 单位为毫米
      format: "a4", // A4纸大小
    });

    // 添加中文字体支持
    console.log("[DeepSeek下载] 添加中文字体支持");
    const fontAdded = addChineseFontToJsPDF(pdf);
    if (!fontAdded) {
      throw new Error("无法添加中文字体");
    }

    // 设置中文字体
    setChineseFont(pdf);

    // 处理HTML内容为纯文本
    const processedContent = await prepareContentForPDF(content);
    console.log("[DeepSeek下载] 处理后的PDF内容长度:", processedContent.length);

    // 设置字体大小
    pdf.setFontSize(12);

    // 计算页面尺寸和边距
    const pageWidth = pdf.internal.pageSize.getWidth();
    const pageHeight = pdf.internal.pageSize.getHeight();
    const margin = 20; // 页面边距，单位毫米
    const contentWidth = pageWidth - 2 * margin;

    // 添加标题
    pdf.setFontSize(16);
    pdf.text(fileName.replace(/\.pdf$/, ""), pageWidth / 2, margin, {
      align: "center",
    });

    // 重置字体大小
    pdf.setFontSize(12);

    // 分割文本为行并添加到PDF
    const lines = splitTextIntoLines(processedContent, 100); // 每行大约100个字符
    let y = margin + 15; // 从标题下方开始
    const lineHeight = 7; // 行高

    for (const line of lines) {
      // 如果即将超出页面边界，添加新页
      if (y + lineHeight > pageHeight - margin) {
        pdf.addPage();
        y = margin; // 重置到新页面顶部
      }

      // 添加文本行
      pdf.text(line, margin, y);
      y += lineHeight;
    }

    // 保存PDF
    pdf.save(fileName);
    console.log("[DeepSeek下载] PDF已保存:", fileName);

    return true;
  } catch (error) {
    console.error("[DeepSeek下载] PDF生成失败:", error);
    throw error;
  }
}

// 将文本分割成行
function splitTextIntoLines(text, maxCharsPerLine) {
  const words = text.split(" ");
  const lines = [];
  let currentLine = "";

  for (const word of words) {
    if ((currentLine + word).length > maxCharsPerLine) {
      lines.push(currentLine);
      currentLine = word + " ";
    } else {
      currentLine += word + " ";
    }
  }

  if (currentLine.trim().length > 0) {
    lines.push(currentLine);
  }

  return lines;
}

// 准备PDF内容，处理图片等
async function prepareContentForPDF(htmlContent) {
  // 在后台脚本环境中，无法使用document
  if (isBackgroundScript) {
    // 简单清理HTML标签
    return htmlContent
      .replace(/<[^>]*>/g, " ")
      .replace(/\s+/g, " ")
      .trim();
  }

  // 在内容脚本环境中，可以使用DOM API
  // 创建临时DOM元素
  const tempDiv = document.createElement("div");
  tempDiv.innerHTML = htmlContent;

  // 处理图片
  const images = tempDiv.querySelectorAll("img");
  for (const img of images) {
    try {
      // 移除图片，在PDF中显示图片描述
      const alt = img.alt || img.title || "图片";
      const placeholderText = document.createTextNode(`[${alt}]`);
      img.parentNode.replaceChild(placeholderText, img);
    } catch (error) {
      console.error("处理图片时出错:", error);
    }
  }

  // 提取纯文本内容
  return tempDiv.textContent;
}

// HTML转Markdown (保留此函数供将来可能恢复功能时使用)
function htmlToMarkdown(html) {
  console.log("[DeepSeek下载] HTML转Markdown功能已禁用");
  return html; // 返回原始HTML
}
